import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.sql.ResultSet;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.border.Border;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;



public class PanelIzquierdo extends JPanel{

	
	private static final long serialVersionUID 	= 4L;
	private static ServidorBaseDatos baseDatos	;
	private static VentanaPrincipal ventanaPrincipal	;
	
	private Calculadora calculadora				= new Calculadora();
	
	
	
	private static String nombresOpciones[]			= {"Usuarios","Empleados","Inmuebles","Clientes",
													"Ventas","Alquileres","Notas de seguimiento",
													"Recordatorios"};
	
	private static JList listaOpciones					= new JList(nombresOpciones);
	private static JPanel panel[]				;
	private static boolean admin				;

	PanelIzquierdo(ServidorBaseDatos baseDatos, VentanaPrincipal ventanaPrincipal){
	
		
		// listaOpciones.setCellRenderer(new MyListCellThing()); // Cambiar color jlist
		
		PanelIzquierdo.baseDatos=baseDatos;
		PanelIzquierdo.ventanaPrincipal=ventanaPrincipal;
		this.setLayout(new GridBagLayout());
		agregarBorde();
		
		panel				= new JPanel[8];
		
		for(int i=0;i<8;i++){
			panel[i]=new JPanel();
		}
		
		panel[0]			= new PanelDerechoUsuario(baseDatos);
		panel[1]			= new PanelDerechoEmpleado(baseDatos);
		panel[2]			= new PanelDerechoInmueble(baseDatos);
		panel[3]			= new PanelDerechoCliente(baseDatos);
		panel[4]			= new PanelDerechoOperacionVenta(baseDatos);
		panel[5]			= new PanelDerechoOperacionAlquiler(baseDatos);
		panel[6]			= new PanelDerechoNotasSeguimiento(baseDatos,this);
		panel[7]			= new PanelDerechoRecordatorio(baseDatos);
		
		agregarOpciones();
		agregarAgenda();
		
		
		ListSelectionListener eventoCambiarPanel = new ListSelectionListener(){
			public void valueChanged(ListSelectionEvent arg0) {
				cambiarPanelDerecho(); 
			} 
		};
		listaOpciones.addListSelectionListener(eventoCambiarPanel);
		

		
		
		/*
		ActionListener eventoCambiarPanel1 = new ActionListener(){ 
			public void actionPerformed(ActionEvent e){
				cambiarPanelDerechoAgenda();
			}
		};
		agenda.addActionListener(eventoCambiarPanel1);*/
	}
	
	public void cambiarPanelDerechoExacto(int panelElegido,int id_operacion){
		
		// Agregado x guido 
		try{
			ventanaPrincipal.cambiarPanelDerecho(panel[panelElegido]);
			
			if(baseDatos.estadoConexion())
				((reCargaCombos)panel[panelElegido]).reCargaCombosBusqueda();
			
			((reCargaCombos)panel[panelElegido]).reCargaCombosBusqueda();
			((reCargaCombos)panel[panelElegido]).reCargaCombosFijos();
			
			if(panelElegido==5 || panelElegido==4)
				((buscarSeguimiento)panel[panelElegido]).crearSeguimiento(id_operacion);
		
			listaOpciones.setSelectedIndex(panelElegido);
			
		}catch (Exception e) {
			//e.printStackTrace();
		}
	}
	
	protected static void cambiarPanelDerecho() {
		
		try{
			
			if (baseDatos.estadoConexion()){

				if(((listaOpciones.getSelectedIndex() == 0 || listaOpciones.getSelectedIndex() == 1) && admin) || (listaOpciones.getSelectedIndex() != 0 && listaOpciones.getSelectedIndex() != 1))
					ventanaPrincipal.cambiarPanelDerecho(panel[listaOpciones.getSelectedIndex()]);
				else{
					JPanel sinPermiso= new JPanel();
					sinPermiso.add(new JLabel("No tiene permisos para usar la funcionalidad"));
					ventanaPrincipal.cambiarPanelDerecho(sinPermiso);
				}

				((reCargaCombos)panel[listaOpciones.getSelectedIndex()]).reCargaCombosBusqueda();
				
			}else{
				
				JPanel sinPermiso= new JPanel();
				sinPermiso.add(new JLabel("No tiene permisos para usar la funcionalidad"));
				ventanaPrincipal.cambiarPanelDerecho(sinPermiso);
			}
			
		}catch (Exception e) {
			
		}
	}


	protected void cambiarPanelDerechoAgenda() {
		ventanaPrincipal.cambiarPanelDerecho(new PanelDerechoDefault(baseDatos));
	}

	private void agregarBorde(){
		
		Border raisedbevel, loweredbevel;
		raisedbevel = BorderFactory.createRaisedBevelBorder();
		loweredbevel = BorderFactory.createLoweredBevelBorder();
		Border compound;
		compound = BorderFactory.createCompoundBorder(raisedbevel, loweredbevel);
		this.setBorder(compound);
	}
	private void agregarOpciones(){
			
		listaOpciones.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listaOpciones.setVisibleRowCount(10);
		
		GridBagConstraints constraints = new GridBagConstraints();
				
		constraints.gridx = 0;
		constraints.gridy = 0;
		constraints.gridwidth = 3;
		constraints.gridheight =1;
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weightx = 1.0;
		constraints.weighty = 1.0;
		
		JScrollPane listScroller = new JScrollPane(listaOpciones);
		listScroller.setPreferredSize(new Dimension(10,200));
		this.add (listScroller, constraints);
				
	}
	private void agregarAgenda(){
		
		GridBagConstraints constraints = new GridBagConstraints();
		
		constraints.gridx = 0;
		constraints.gridy = 1;
		constraints.gridwidth = 3;
		constraints.gridheight = 1;
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weighty = 0.0; 
		constraints.weightx = 1.0; 
		this.add (calculadora, constraints); 
		
		calculadora.setMaximumSize(new Dimension(20,9999));
		calculadora.setPreferredSize(new Dimension(20,9999));
	}
	
	public static void ocultarFunciones(){
		
		try {

			ResultSet resultadoConsulta = baseDatos.query("select admin from usuario where nombre = '"+baseDatos.getServidorUsuario()+"'");
			
			resultadoConsulta.next();
			
			admin=resultadoConsulta.getBoolean("admin");
			
			cambiarPanelDerecho();
			
			resultadoConsulta.close();
			
		} catch (Exception e1) {
			e1.printStackTrace();
			if(baseDatos.getServidorUsuario().equals("root"))
				admin=true;
			else
				admin=false;
		}
	}
	
	public static void reCargarCombosPaneles(){
		
		((reCargaCombos)panel[0]).reCargaCombosBusqueda();
		((reCargaCombos)panel[0]).reCargaCombosFijos();
		
		((reCargaCombos)panel[1]).reCargaCombosFijos();
		
		((reCargaCombos)panel[2]).reCargaCombosBusqueda();
		((reCargaCombos)panel[2]).reCargaCombosFijos();
		
		((reCargaCombos)panel[3]).reCargaCombosFijos();
		
		((reCargaCombos)panel[4]).reCargaCombosBusqueda();
		((reCargaCombos)panel[4]).reCargaCombosFijos();
	
		((reCargaCombos)panel[5]).reCargaCombosBusqueda();
		((reCargaCombos)panel[5]).reCargaCombosFijos();
		
		((reCargaCombos)panel[6]).reCargaCombosBusqueda();
		((reCargaCombos)panel[6]).reCargaCombosFijos();
		
		((reCargaCombos)panel[7]).reCargaCombosBusqueda();
		((reCargaCombos)panel[7]).reCargaCombosFijos();
		
	}
}
